Adem�s de especificar una b�squeda usando un grupo de atributos, podemos especificarla en la forma de un filtro de b�squeda. Un filtro de b�squeda es una consulta expresada en la forma de una expresi�n l�gica. La s�ntaxis de todos los filtros aceptados por DirContext.search() se describe en la RFC 2254.
El siguiente filtro de b�squeda especifica que las entradas cualificadas deben tener un atributo "sn" con un valor de "Geisel" y un atributo "mail" con cualquier valor.
(&(sn=Geisel)(mail=*))
El siguiente c�digo crea un filtro y los controles de b�squeda por defecto SearchControls, y los usa para realizar la b�squeda. La b�squeda es equivalente a la presentada en el ejemplo de la p�gina anterior.
// Create the default search controls
SearchControls ctls = new SearchControls();
// Specify the search filter to match
// Ask for objects that have the attribute "sn" == "Giesel"
// and the "mail" attribute
String filter = "(&(sn=Geisel)(mail=*))";
// Search for objects using the filter
NamingEnumeration answer = ctx.search("ou=People", filter, ctls);
Ejecutar este ejemplo produce esta salida.
# java SearchWithFilterRetAll >>>cn=Ted Geisel attribute: sn value: Geisel attribute: objectclass value: top value: person value: organizationalPerson value: inetOrgPerson attribute: jpegphoto value: [B@1dacd75e attribute: mail value: [email protected] attribute: facsimiletelephonenumber value: +1 408 555 2329 attribute: cn value: Ted Geisel attribute: telephonenumber value: +1 408 555 5252
�R�pida Visi�n de la S�ntaxis de los Filtros de B�squeda
La s�ntaxis del filtro de b�squeda es b�sicamente una expresi�n l�gica en notaci�n de prefijo, (es decir, los operadores l�gicos aparecen antes de los argumentos). La siguiente tabla lista los s�mbolos usados para crear filtros.
| S�mbolo | Descripci�n |
|---|---|
| & | conjunci�n (es decir, and -- todos los de la lista deben ser ciertos) |
| | | disjunci�n (es decir, or --una o m�s alternativas deben ser ciertas) |
| ! | negaci�n (es decir, not -- el �tem que est� siendo negado no debe ser cierto) |
| = | igualdad (de acuerdo a la regla de correspondencia del atributo) |
| ~= | aproximadamente igual (de acuerdo a la regla de correspondencia del atributo) |
| >= | mayor que (de acuerdo a la regla de correspondencia del atributo) |
| <= | menor que (de acuerdo a la regla de correspondencia del atributo) |
| =* | presencia (es decir, la entrada debe tener el atributo, pero su valor es irrelevante) |
| * | comod�n (indica cero o m�s caracteres que pueden ocurrir en esa posici�n), se utiliza cuando se especifican atributos para su correspondencia |
| \ | escape (para escapar '*', '(', or ')' cuando ocurren dentro del valor del un atributo) |
Cada �tem del filtro est� compuesto usando un identificador de atributo y un valor de atributo o s�mbolos que denotan el valor del atributo. Por ejemplo, el �tem "sn=Geisel" significa que el atributo "sn" debe tener el valor de atributo "Geisel" y el �tem "mail=*" indica que el aributo "mail" s�lo debe estar presente.
Cada �tem debe estar encerrado entre par�ntesis, como en "(sn=Geisel)".
Estos �tems se componen usando operadores l�gicos como "&" (conjunci�n) para crear operaciones l�gicas, como en "(& (sn=Geisel) (mail=*))".
Cada expresi�n l�gica puede estar compuesta por otros �tems que a su vez pueden ser otras expresiones l�gicas, como en "(| (& (sn=Geisel) (mail=*)) (sn=L*))". Este �ltimo ejemplo solicita las entradas que tiene el atributo "sn" de "Geisel" y el atributo "mail" o cuya entrada "sn" empieza con la letra "L."
Para una completa descripci�n de la s�ntaxis puedes ver la RFC 2254.
�Devolver los Atributos Seleccionados
El ejemplo anterior devolv�a todos los atributos asociados con las entradas que cumpl�an con el filtro especificado. Podemos seleccionar los atributos a devolver seleccionando los argumentos de control de b�squeda. Podemos crear un array de identificadores de atributos que queremos incluir en el resultado y pasarlo a SearchControls.setReturningAttributes().
(Los controles de b�squeda se describen en la siguiente secci�n.) Aqu� tenemos un ejemplo.
// Specify the ids of the attributes to return
String[] attrIDs = {"sn", "telephonenumber", "golfhandicap", "mail"};
SearchControls ctls = new SearchControls();
ctls.setReturningAttributes(attrIDs);
Este ejemplo es equivalente al ejemplo Devolver Atributos Seleccionados de la p�gina anterior. Al ejecutar el ejemplo se produce la siguiente salida. (La entrada no tiene un atributo "golfhandicap", por eso no se devuelve).
# java SearchWithFilter >>>cn=Ted Geisel attribute: sn value: Geisel attribute: mail value: [email protected] attribute: telephonenumber value: +1 408 555 5252